/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.tida.servir.pages;

import Batch.Helpers.GeneracionXLS;
import com.tida.servir.base.GeneralPage;
import com.tida.servir.components.Envelope;
import com.tida.servir.entities.*;
import com.tida.servir.services.GenericSelectModel;
import helpers.*;
import java.io.*;
import java.util.*;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.xml.JRXmlLoader;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.tapestry5.Asset;
import org.apache.tapestry5.ComponentResources;
import org.apache.tapestry5.StreamResponse;
import org.apache.tapestry5.ajax.MultiZoneUpdate;
import org.apache.tapestry5.annotations.*;
import org.apache.tapestry5.corelib.components.Form;
import org.apache.tapestry5.corelib.components.Grid;
import org.apache.tapestry5.corelib.components.Zone;
import org.apache.tapestry5.hibernate.annotations.CommitAfter;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.ioc.services.PropertyAccess;
import org.apache.tapestry5.services.Response;
import org.apache.tapestry5.upload.services.UploadedFile;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;

/**
 *
 * @author Miller Cribillero
 * @date 17/09/2012 18:00
 *
 */
public class ConsultaSanciones extends GeneralPage {

    @Inject
    private Session session;
    @SessionState
    private Usuario loggedUser;
    @InjectComponent
    private Envelope envelope;
    @Component(id = "formmensaje")
    private Form formmensaje;
//    @Component(id = "formulariosatosSancion")
//    private Form formulariosatosSancion;
    @InjectComponent
    @Property
    private Zone mensajeZone;
    @SessionState
    @Property
    private UsuarioTrabajador usuarioTrabajador;
    @SessionState
    @Property
    private UsuarioAcceso usua;
    @InjectComponent
    @Property
    private Zone consultaSancionesZone;
    @InjectComponent
    @Property
    private Zone tiposancionZone;
    @InjectComponent
    @Property
    private Zone busZone2;
    @Property
    @SessionState
    private Entidad entidadUE;
    @Persist
    @Property
    private String entidad_origen;
//    @Property
//    @Persist
//    private Trabajador nuevo;
    @Inject
    private PropertyAccess _access;
    @Persist
    @Property
    private String nroentidad;
    @InjectComponent
    @Property
    private Zone busZone;
    @InjectComponent
    @Property
    private Zone listaConsultaSancionZone;
//    @InjectComponent
//    @Property    
//    private Zone eliminarSancionZone;
    @Persist
    @Property
    private Boolean mostrarEliminar;
    @Persist
    @Property
    private String bnombres;
    @Persist
    @Property
    private String bapellidoPaterno;
    @Persist
    @Property
    private String bapellidoMaterno;
    @Persist
    @Property
    private DatoAuxiliar bdocumentoidentidad;
    @Persist
    @Property
    private DatoAuxiliar bdocumentoidentidad2;
    @Persist
    @Property
    private DatoAuxiliar bdocumentoidentidad_not;
    @Persist
    @Property
    private String bnumeroDocumento;
    @Persist
    @Property
    private String bnumeroDocumento2;
    @Persist
    @Property
    private String bnumeroDocumento_not;
    @Persist
    @Property
    private String juzgado_not;
    @Persist
    @Property
    private String observaciones;
    @Property
    @SessionState
    private Usuario _usuario;
    @Persist
    @Property
    private String bdenoentidad;
    @Persist
    @Property
    private String motEliminacionSancion;
    @Persist
    @Property
    private Long entidad_origen_id;
    @Persist
    @Property
    private Boolean esVigente;
    @Persist
    @Property
    private Boolean esNoVigente;
    @Persist
    @Property
    private Boolean esHistorica;
    @Persist
    @Property
    private Boolean esEliminada;
    @Persist
    @Property
    private Boolean esAnulada;
    @Persist
    @Property
    private Boolean esSuspendida;
    @Persist
    @Property
    private Boolean esTrabajador;
    @Persist
    @Property
    private Boolean mostrartodo;
    @Persist
    @Property
    private Boolean bmostrar;
    @Persist
    @Property
    private Boolean mostrar_reglab;
//    @Persist
//    @Property
//    private Boolean v_editar;
    @Persist
    @Property
    private Boolean entidadsubentidad;
    @Property
    @Persist
    private DatoAuxiliar bregimenLaboral;
    @Persist
    @Property
    private DatoAuxiliar bcategoriaSancion;
    @Persist
    @Property
    private TipoSancion btipoSancion;
    @Property
    @Persist
    private LkBusquedaEntidad entio;
    @Property
    @Persist
    private LkBusquedaSancion cs;
    @Property
    @Persist
    private LkBusquedaSancion cs_sinreglab;
    @Component(id = "formconsultaSancion")
    private Form formconsultaSancion;
    @Component(id = "formularioconsultasanciones")
    private Form formularioconsultasanciones;
    @Component(id = "formularioanularsancion")
    private Form formularioanularsancion;
    @Property
    @Persist
    private Entidad entidad2;
    @Property
    @Persist
    private Anulacion anulacion;
    @Property
    @Persist
    private int elemento;
    @Property
    @Persist
    private int anular;
    @Property
    @Persist
    private String errorBorrar;
    @Property
    @Persist
    private Sancion sancion;
    @Property
    @Persist
    private String fechadoc;
    @Property
    @Persist
    private String fechadocnot;
    @Property
    @Persist
    private String nro_sanciones;
    @Property
    @Persist
    private String nro_sanciones_sinreglab;
    @Inject
    private ComponentResources _resources;
    @Property
    @Persist
    private Boolean vexportar;
    @Property
    @Persist
    private String texto;
    @Property
    @Persist
    LkPerfilUsuarioAccesoSanciones accesoPerfilSanciones;
    @Property
    @Persist
    private int nroDiasEliminarSancion;
    @Property
    @Persist
    private Date fechaActual;
    @Persist
    private String formatoexportacion;
    @Property
    private Boolean buscaEntidad;
    @Property
    @Persist
    private List<LkBusquedaSancion> listaSancion;
    @Property
    private Boolean OpcionMostrarEnlace;

    @Log
    void setupRender() {
        if (archivoDescargar == null) {
            OpcionMostrarEnlace = false;
        } else {
            OpcionMostrarEnlace = true;
        }
        elemento = 0;
        anular = 0;
        buscaEntidad = false;
        texto = "Detalle";
        STARTPATH = getRuta().get(0).getRuta_final() + "consultassan/";
        vexportar = false;
        Query query = session.getNamedQuery("callSpUsuarioAccesoPagina");
        query.setParameter("in_login", _usuario.getLogin());
        query.setParameter("in_pagename", _resources.getPageName().toUpperCase());
        List result = query.list();
        if (result.isEmpty()) {
            System.out.println(String.valueOf("Vacio:"));
        } else {
            usua = (UsuarioAcceso) result.get(0);
        }
        Criteria c = session.createCriteria(LkPerfilUsuarioAccesoSanciones.class);
        c.add(Restrictions.eq("usuarioId", Long.valueOf(loggedUser.getId().toString())));
        if (!c.list().isEmpty()) {
            accesoPerfilSanciones = (LkPerfilUsuarioAccesoSanciones) c.list().get(0);
            formatoexportacion = accesoPerfilSanciones.getFormatoExportacion();
        }

        entidad_origen = "";
        entidad_origen_id = null;
        bapellidoPaterno = "";
        bapellidoMaterno = "";
        bnombres = "";
        bnumeroDocumento = "";
        bdocumentoidentidad = null;
        bregimenLaboral = null;
        bcategoriaSancion = null;
        valMotivo = null;
//        btipoSancion = null;
        esSuspendida = false;
        esAnulada = false;
        esHistorica = false;
        esEliminada = false;
        esNoVigente = false;
        esVigente = false;
        mostrar_reglab = false;

        // modificacion de obtener el nro de dias para eliminar un sancion 
        ConfiguracionAcceso ca = (ConfiguracionAcceso) session.load(ConfiguracionAcceso.class, 1L);
        nroDiasEliminarSancion = ca.getNroDiasEliminarSancion().intValue();
        fechaActual = new Date();

//        if (accesoPerfilSanciones.getPerfilId() == 3) { //Administrador de Entidad
//            entidadsubentidad = true;
//        } else {
//            entidadsubentidad = false;
//        }
//
        if (accesoPerfilSanciones.getPerfilId() == 2 || accesoPerfilSanciones.getPerfilId() == 3) { //administrador de Servir
            bmostrar = true;
        } else {
            bmostrar = false;
        }

        if (usua.getAccesoupdate() == 1) {
//            v_editar = true;
            texto = "Editar";
        }
        mostrarLista = Boolean.FALSE;
        System.out.println("1234XXXX1 -  " + usua.getId() + " - " + loggedUser.getId());

        mostrarEliminar = Boolean.FALSE;
    }

    @Log
    public List<ConfiguracionAcceso> getRuta() {
        Criteria c = session.createCriteria(ConfiguracionAcceso.class);
        return c.list();
    }

    @Log
    public GenericSelectModel<DatoAuxiliar> getTiposDoc() {
        List<Long> lista = new ArrayList<Long>();
        lista.add(new Long(1));
        lista.add(new Long(2));
        Criteria c = session.createCriteria(DatoAuxiliar.class);
        c.add(Restrictions.eq("nombreTabla", "DOCUMENTOIDENTIDAD"));
        c.add(Restrictions.in("codigo", lista));
        return new GenericSelectModel<DatoAuxiliar>(c.list(), DatoAuxiliar.class, "abrev", "id", _access);
    }

    @Log
    public GenericSelectModel<DatoAuxiliar> getRegimenLaboral() {
        List<DatoAuxiliar> list = Helpers.getDatoAuxiliar("REGIMENLABORAL", null, 0, session);
        return new GenericSelectModel<DatoAuxiliar>(list, DatoAuxiliar.class, "valor", "id", _access);
    }

    @Log
    public GenericSelectModel<DatoAuxiliar> getCategoriaSancion() {
        List<DatoAuxiliar> list = Helpers.getDatoAuxiliar("CATEGORIASANCION", null, 0, session);
        return new GenericSelectModel<DatoAuxiliar>(list, DatoAuxiliar.class, "valor", "id", _access);
    }

    @Log
    @SuppressWarnings("unchecked")
    public GenericSelectModel<TipoSancion> getTipoSancion() {
        List<LkTipoSancionRegLab> list;
        Criteria c1 = session.createCriteria(TipoSancion.class);

        if (bregimenLaboral == null) { //&& bcategoriaSancion == null
            c1.add(Restrictions.eq("id", 999999999L));
            return new GenericSelectModel<TipoSancion>(c1.list(), TipoSancion.class, "descripcion", "id", _access);
        }

        Criteria c = session.createCriteria(LkTipoSancionRegLab.class);
        if (bregimenLaboral != null) {
            c.add(Restrictions.eq("reg_laboral", bregimenLaboral.getId()));
        }
        if (bcategoriaSancion != null) {
            c.add(Restrictions.eq("categoria", bcategoriaSancion.getId()));
        }
        c.setProjection(Projections.distinct(Projections.property("id_tipo")));

        if (!c.list().isEmpty()) {
            c1.add(Restrictions.in("id", c.list()));
            return new GenericSelectModel<TipoSancion>(c1.list(), TipoSancion.class, "descripcion", "id", _access);

        } else {

            c1.add(Restrictions.isNull("id"));
        }

        list = c.list();
        return new GenericSelectModel<TipoSancion>(c1.list(), TipoSancion.class, "descripcion", "id", _access);
    }
    @Persist
    private Boolean mostrarLista;
    @InjectComponent
    private Grid grid;

    @Log
    public List<LkBusquedaSancion> getBusquedaSancionadosSinRegLab() {
        Criteria c;
        listaSancion = new ArrayList<LkBusquedaSancion>();
        if (mostrarLista == Boolean.FALSE) {
            System.out.println("FALSEX");
            nro_sanciones_sinreglab = "0";
            return listaSancion;
        }

        c = session.createCriteria(LkBusquedaSancion.class);
        if (entidad_origen_id != null) {
            c.add(Restrictions.eq("entidad_id", entidad_origen_id));
        }
        if (bnombres != null) {
            c.add(Restrictions.like("nombres_persona", "%" + bnombres.trim() + "%").ignoreCase());
        }
        if (bapellidoPaterno != null) {
            c.add(Restrictions.like("apellidopat_persona", "%" + bapellidoPaterno.trim() + "%").ignoreCase());
        }
        if (bapellidoMaterno != null) {
            c.add(Restrictions.like("apellidomat_persona", "%" + bapellidoMaterno.trim() + "%").ignoreCase());
        }
        if (bdocumentoidentidad != null) {
            c.add(Restrictions.eq("tipo_doc_persona", bdocumentoidentidad.getId()));
        }
        if (bnumeroDocumento != null) {
            c.add(Restrictions.like("nro_doc_persona", "%" + bnumeroDocumento.trim() + "%").ignoreCase());
        }
        if (bregimenLaboral != null) {
            c.add(Restrictions.eq("id_reg_laboral", bregimenLaboral.getId()));
        }
        if (bcategoriaSancion != null) {
            c.add(Restrictions.eq("categoria_sancion_id", bcategoriaSancion.getId()));
        }
        if (btipoSancion != null) {
            c.add(Restrictions.eq("id_tipo_sancion", btipoSancion.getId()));
        }
        System.out.println("elemento " + elemento);

        List<Long> estados = new ArrayList<Long>();
        if (elemento == 1) {
            if (esVigente == true) {
                estados.add(1L);
            }
            if (esNoVigente == true) {
                estados.add(2L);
            }
            if (accesoPerfilSanciones.getPerfilId() <= 2) {
                if (esAnulada == true) {
                    estados.add(3L);
                }
            }
            if (esSuspendida == true) {
                estados.add(4L);
            }
            if (esHistorica == true) {
                estados.add(5L);
            }
            if (esEliminada == true) {
                estados.add(6L);
            }
        }

        // cambios wilson - 11 marzo
        List<Long> sinAccesoEstado = new ArrayList<Long>();
        if (accesoPerfilSanciones.getAccesovigente() == Boolean.FALSE) {
            sinAccesoEstado.add(1L);
        }
        if (accesoPerfilSanciones.getAccesonovigente() == Boolean.FALSE) {
            sinAccesoEstado.add(2L);
        }
        if ((accesoPerfilSanciones.getAccesoanulada() == Boolean.FALSE) || ((accesoPerfilSanciones.getPerfilId() > 2) && !esAnulada)) {
            sinAccesoEstado.add(3L);
        }
        if (accesoPerfilSanciones.getAccesosuspendida() == Boolean.FALSE) {
            sinAccesoEstado.add(4L);
        }
        if (accesoPerfilSanciones.getAccesohistorico() == Boolean.FALSE) {
            sinAccesoEstado.add(5L);
        }
        if (accesoPerfilSanciones.getAccesoeliminada() == Boolean.FALSE) {
            sinAccesoEstado.add(6L);
        }

        Criterion rest1 = null, rest2 = null;
        if (!estados.isEmpty() && !sinAccesoEstado.isEmpty()) {
            rest1 = Restrictions.and(Restrictions.in("estado_id", estados), Restrictions.not(Restrictions.in("estado_id", sinAccesoEstado)));
        } else {
            if (!estados.isEmpty()) {
                rest1 = Restrictions.in("estado_id", estados);
            }
            if (!sinAccesoEstado.isEmpty()) {
                rest1 = Restrictions.not(Restrictions.in("estado_id", sinAccesoEstado));
            }
        }
//        if (accesoPerfilSanciones.getPerfilId() > 2) {
//            if (accesoPerfilSanciones.getAccesoanulada() || esAnulada) {
//                rest2 = Restrictions.and(Restrictions.eq("entidad_id", usuarioTrabajador.getEntidadid()), Restrictions.eq("estado_id", 3L));
//            }
//        }
        if (accesoPerfilSanciones.getPerfilId() == 3) {
            if (accesoPerfilSanciones.getAccesoanulada()) {
                if (esAnulada) {
                    rest2 = Restrictions.and(Restrictions.eq("entidad_id", usuarioTrabajador.getEntidadid()), Restrictions.eq("estado_id", 3L));
                }
            }
        }
        if (accesoPerfilSanciones.getPerfilId() == 6) {
            if (accesoPerfilSanciones.getAccesoanulada()) {
                if (esAnulada) {
                    rest2 = Restrictions.eq("estado_id", 3L);
                }
            }
        }
        if (rest2 == null) {
            if (rest1 != null) {
                c.add(rest1);
            }
        } else {
            if (esAnulada) {
                c.add(Restrictions.and(rest1, rest2));
            } else {
                c.add(Restrictions.or(rest1, rest2));
            }
        }
        c.addOrder(Order.asc("b_datos_persona"));
        listaSancion = c.list();
        nro_sanciones_sinreglab = Integer.toString(listaSancion.size());
//        if (grid.getSortModel().getSortConstraints().isEmpty()) {
//            grid.getSortModel().updateSort("b_datos_persona");
//        }
        return listaSancion;
    }

    Object onBuscarpersona() {
        return new MultiZoneUpdate("consultaSancionesZone", consultaSancionesZone.getBody()).add("busZone", busZone.getBody());
//          return consultaSancionesZone.getBody();
    }

    @Log
    @CommitAfter
    Object onSuccessFromFormulariobusqueda() {
        buscaEntidad = true;
        return busZone.getBody();
    }

    @Log
    public List<Entidad> getEntidades() {
        List<Entidad> listaEntidad;
        Criteria c = session.createCriteria(LkBusquedaEntidad.class);
        c.add(Restrictions.eq("estado", true));
        if (bdenoentidad != null && !bdenoentidad.equals("")) {
            c.add(Restrictions.disjunction().
                    add(Restrictions.like("denominacion", "%" + bdenoentidad + "%").ignoreCase()).
                    add(Restrictions.like("denominacion", "%" + bdenoentidad.replaceAll("ñ", "n") + "%").ignoreCase()).
                    add(Restrictions.like("denominacion", "%" + bdenoentidad.replaceAll("n", "ñ") + "%").ignoreCase()).
                    add(Restrictions.like("descriptores", "%" + bdenoentidad + "%").ignoreCase()).
                    add(Restrictions.like("descriptores", "%" + bdenoentidad.replaceAll("ñ", "n") + "%").ignoreCase()).
                    add(Restrictions.like("descriptores", "%" + bdenoentidad.replaceAll("n", "ñ") + "%").ignoreCase()).
                    add(Restrictions.like("SIGLA", "%" + bdenoentidad + "%").ignoreCase()).
                    add(Restrictions.like("SIGLA", "%" + bdenoentidad.replaceAll("ñ", "n") + "%").ignoreCase()).
                    add(Restrictions.like("SIGLA", "%" + bdenoentidad.replaceAll("n", "ñ") + "%").ignoreCase()));
        }
        listaEntidad = c.list();
        nroentidad = Integer.toString(listaEntidad.size());
        return listaEntidad;
    }

    @Log
    Object onValueChangedFromCategoriaSancion(DatoAuxiliar dato) {
        return tiposancionZone.getBody();
    }

    @Log
    Object onValueChangedFromRegimenLaboral(DatoAuxiliar dato) {
        btipoSancion = null;
        return tiposancionZone.getBody();
    }
    @Persist
    private String STARTPATH;
    @Property
    @Persist
    private String archivoDescargar;
    private List<String> errores = new LinkedList<String>();
    @Persist
    @Property
    private Boolean bmostrarexportar;

    @Log
    @CommitAfter
    Object onSuccessFromFormularioConsultaSanciones() {
        vexportar = false;
        bmostrarexportar = true;
        if (elemento == 1) {
            if (bregimenLaboral != null) {
                mostrar_reglab = true;
            } else {
                mostrar_reglab = false;
            }

            return new MultiZoneUpdate("listaConsultaSancionZone", listaConsultaSancionZone.getBody())
                    .add("consultaSancionesZone", consultaSancionesZone.getBody()).add("exportarZone", exportarZone.getBody());
        } else if (elemento == 2) {
            mostrar_reglab = false;
            return new MultiZoneUpdate("listaConsultaSancionZone", listaConsultaSancionZone.getBody())
                    .add("consultaSancionesZone", consultaSancionesZone.getBody()).add("exportarZone", exportarZone.getBody());
        }
        return listaConsultaSancionZone.getBody();
    }
    @Inject
    @Path(value = "context:WEB-INF/reports/RegistroSancion.jrxml")
    private Asset RegistroSancion;

    @Log
    StreamResponse onVerReporteSancion(LkBusquedaSancion sancion) throws IOException, JRException {
        Encriptacion encripta = new Encriptacion();
        InputStream is = RegistroSancion.getResource().openStream();
        ArrayList<LkBusquedaSancion> listaSancion = new ArrayList<LkBusquedaSancion>();
        listaSancion.add(sancion);
        JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(listaSancion);

        Map reportParams = new HashMap();
        //reportParams.put("TITLE", "SOME REPORT TITLE");

        JasperDesign reportDesign = JRXmlLoader.load(is);
        JasperReport reportCompiled = JasperCompileManager.compileReport(reportDesign);
        JasperPrint reportPrinted = JasperFillManager.fillReport(reportCompiled, reportParams, ds);

        ByteArrayInputStream bais = new ByteArrayInputStream(JasperExportManager.exportReportToPdf(reportPrinted));

        return new PDFStreamResponse(bais, encripta.MD5("ReporteServir" + sancion.getId_sancion()));
    }
    @Inject
    @Path(value = "context:WEB-INF/reports/Sanciones.jrxml")
    private Asset ReportForm;

    public StreamResponse onActionFromReturnStreamResponse() throws IOException, JRException {
        if (formatoexportacion.equals("EXCEL")) {
            return ActionFromReturnStreamResponse();
        } else {
            InputStream is = ReportForm.getResource().openStream();

            JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(listaSancion);

            Map reportParams = new HashMap();
            //reportParams.put("TITLE", "SOME REPORT TITLE");

            JasperDesign reportDesign = JRXmlLoader.load(is);
            JasperReport reportCompiled = JasperCompileManager.compileReport(reportDesign);
            JasperPrint reportPrinted = JasperFillManager.fillReport(reportCompiled, reportParams, ds);

            ByteArrayInputStream bais = new ByteArrayInputStream(JasperExportManager.exportReportToPdf(reportPrinted));

            return new PDFStreamResponse(bais, "ConsultaSanciones");
        }
    }

    StreamResponse ActionFromReturnStreamResponse() {

        return new StreamResponse() {
            InputStream inputStream;

            @Override
            public void prepareResponse(Response response) {
                File fileADescargar = new File(archivoDescargar);

                try {
                    inputStream = new FileInputStream(fileADescargar);
                } catch (FileNotFoundException ex) {
                }

                try {
                    response.setHeader("Content-Type", "application/x-zip");
                    response.setHeader("Content-Disposition", "inline; filename=" + fileADescargar.getName());
                    response.setHeader("Content-Length", "" + inputStream.available());
                } catch (IOException e) {
                }
            }

            @Override
            public String getContentType() {
                return "application/x-zip";
            }

            @Override
            public InputStream getStream() throws IOException {
                return inputStream;
            }
        };
    }

    @Log
    void onSelectedFromBuscarSubmit() {
        mostrarLista = Boolean.TRUE;
        elemento = 1;
    }

    @Log
    void onSelectedFromMuestra() {
        mostrarLista = Boolean.TRUE;
        elemento = 2;
        entidad_origen = null;
        entidad_origen_id = null;
        bapellidoPaterno = null;
        bapellidoMaterno = null;
        bnombres = null;
        bnumeroDocumento = null;
        esSuspendida = false;
        esAnulada = false;
        esHistorica = false;
        esNoVigente = false;
        esVigente = false;

        bdocumentoidentidad = null;
        bregimenLaboral = null;
        bcategoriaSancion = null;
        btipoSancion = null;
    }
    @InjectComponent
    @Property
    private Zone exportarZone;

    Object onExportar() {
        vexportar = true;
        mostrar_reglab = false;
        //Exportando en Excel
        GeneracionXLS geXLS = new GeneracionXLS();
//        GeneracionPDF gePDF = new GeneracionPDF();
        String nombre = formatoexportacion.equals("EXCEL") ? "CONSULTASANCIONES.xls" : "CONSULTASANCIONES.pdf";
        archivoDescargar = STARTPATH + nombre;
        File f = new File(STARTPATH);
        if (!f.exists()) {
            f.mkdirs();
        }
        File fa = new File(STARTPATH + nombre);
        if (!fa.exists()) {
            fa.delete();
        }
        if (formatoexportacion.equals("EXCEL")) {
            if (accesoPerfilSanciones.getPerfilId() <= 2) {
                errores = geXLS.generadoXLSConsultaSancionadosId(getBusquedaSancionadosSinRegLab(), STARTPATH + nombre, session);
            } else {
                errores = geXLS.generadoXLSConsultaSancionadosSinRegLab(getBusquedaSancionadosSinRegLab(), STARTPATH + nombre, session);
            }
        } else {
            System.out.println("aquiiipdfff" + archivoDescargar);
        }

        System.out.println("SIN REG");

        return new MultiZoneUpdate("exportarZone", exportarZone.getBody());
    }

    @Log
    Object onLimpiar() {
        entidad_origen = null;
        entidad_origen_id = null;
        bapellidoPaterno = null;
        bapellidoMaterno = null;
        bnombres = null;
        bnumeroDocumento = null;
        esSuspendida = false;
        esAnulada = false;
        esHistorica = false;
        esNoVigente = false;
        esVigente = false;
        esEliminada = false;
        bdocumentoidentidad = null;
        bregimenLaboral = null;
        bcategoriaSancion = null;
        btipoSancion = null;
        bmostrarexportar = Boolean.FALSE;
        mostrarLista = Boolean.FALSE;
        return new MultiZoneUpdate("listaConsultaSancionZone", listaConsultaSancionZone.getBody())
                .add("consultaSancionesZone", consultaSancionesZone.getBody()).add("exportarZone", exportarZone.getBody());
    }

    @Log
    Object onActionFromSeleccionar(Entidad enti2) {
        entidad2 = enti2;
        entidad_origen = entidad2.getDenominacion();
        entidad_origen_id = entidad2.getId();
        buscaEntidad = false;
        return new MultiZoneUpdate("consultaSancionesZone", consultaSancionesZone.getBody())
                .add("busZone", busZone.getBody());
    }

//    @Log
//    Object onActionFromAnular(LkBusquedaSancionados cs) {        
//        
//         return new MultiZoneUpdate("listaConsultaSancionZone", listaConsultaSancionZone.getBody())
//                  .add("consultaSancionesZone",consultaSancionesZone.getBody()).add("busZone2",busZone2.getBody());  
//    }
//    @Log
//    Object onActionFromAnular_SinRegLab(LkBusquedaSancionadosSinRegLab cs_sinreglab) {        
//        
//         return new MultiZoneUpdate("listaConsultaSancionZone", listaConsultaSancionZone.getBody())
//                  .add("consultaSancionesZone",consultaSancionesZone.getBody()).add("busZone2",busZone2.getBody());  
//    }
    @Log
    Object onActionFromCancel1() {

        return new MultiZoneUpdate("listaConsultaSancionZone", listaConsultaSancionZone.getBody())
                .add("consultaSancionesZone", consultaSancionesZone.getBody());
    }

    @Log
    @CommitAfter
    Object onSuccessFromFormularioAnularSancion() {
        if (anular == 1) {
            return busZone2.getBody();
        }
        return busZone2.getBody();
    }

//    @Log
//    @CommitAfter
//    Object onBorrarDato(UnidadOrganica dato) {
//        errorBorrar = null;
//        new Logger().loguearOperacion(session, loggedUser, String.valueOf(dato.getId()), Logger.CODIGO_OPERACION_DELETE, Logger.RESULTADO_OPERACION_OK, Logger.TIPO_OBJETO_UNIDAD_ORGANICA);
//        dato.setEstado(UnidadOrganica.ESTADO_BAJA);
//        session.saveOrUpdate(dato);
//        envelope.setContents("Sancion Eliminada");
//
//        return new MultiZoneUpdate("listaConsultaSancionZone", listaConsultaSancionZone.getBody())
//                  .add("consultaSancionesZone",consultaSancionesZone.getBody());
//    }
    @Log
    Object onActionFromSave(Anulacion anulacion) {

        return new MultiZoneUpdate("consultaSancionesZone", consultaSancionesZone.getBody());
    }

    @Log
    public Boolean getSancionAnulada() {
        System.out.println("EST5ADOX  " + cs.getEstado_id());
        if (cs.getEstado_id() == 4) {
            return Boolean.FALSE;
        }
        return Boolean.TRUE;
    }
    @InjectComponent
    @Property
    private Zone busZone3;
    @Property
    @Persist
    private String valMotivo;
    @Persist
    @Property
    private Long idSancionaEliminar;
    @Component(id = "formularioEliminarSancion")
    private Form formularioEliminarSancion;
    @Property
    private String entidadEliminar;
    @Property
    private String funcionarioEliminar;

    @Log
    Object onEliminarSancion(LkBusquedaSancion lkSancion) {
        System.out.println("PRUEBA -" + lkSancion.getId_sancion());
        idSancionaEliminar = lkSancion.getId_sancion();
        entidadEliminar = lkSancion.getEntidad_subentidad();
        funcionarioEliminar = lkSancion.getB_datos_persona();
        return new MultiZoneUpdate//("listaConsultaSancionZone",listaConsultaSancionZone.getBody()).add
                ("busZone3", busZone3.getBody());
//          return consultaSancionesZone.getBody();
    }
    @Persist
    @Property
    private int opcCancelarEliminarSancion;

    @Log
    void onSelectedFromCancelarEliminacion() {
        opcCancelarEliminarSancion = 1;
    }

    @Log
    void onSelectedFromEliminarsubmit() {
        opcCancelarEliminarSancion = 2;
    }

    @Log
    @CommitAfter
    Object onSuccessFromFormularioEliminarSancion() {
        // eliminar la sancion
        // --------------------
        if (opcCancelarEliminarSancion == 2) {
            System.out.println("SE EJECUTA ELIMINAR SANCION");
            Criteria c = session.createCriteria(DatoAuxiliar.class);
            c.add(Restrictions.eq("nombreTabla", "ESTADOSANCION"));
            c.add(Restrictions.eq("valor", "ELIMINADA"));
            System.out.println("RESULTADOX" + c.list().isEmpty());
            DatoAuxiliar estadoEliminada = (DatoAuxiliar) c.list().get(0);

            c = session.createCriteria(Sancion.class);
            c.add(Restrictions.eq("id", idSancionaEliminar.longValue()));
            Sancion sancionEliminada = (Sancion) c.list().get(0);
            //Sancion sancionEliminada = new Sancion();
            sancionEliminada.setId(idSancionaEliminar);
            sancionEliminada.setSancion_estado(estadoEliminada);
            sancionEliminada.setMotivoEliminacion(valMotivo);
            session.saveOrUpdate(sancionEliminada);
            session.flush();
            opcCancelarEliminarSancion = 0;
        }
        idSancionaEliminar = null;
        valMotivo = null;

        return new MultiZoneUpdate//("consultaSancionesZone",consultaSancionesZone.getBody()).add
                ("listaConsultaSancionZone", listaConsultaSancionZone.getBody());
    }

    @Log
    public Boolean getAccionesRegistro() {
        // Si el registro es de su entidad o el usuario tiene el perfil Sistema o Servir
        if (accesoPerfilSanciones.getPerfilId() <= 2) {
            return true;
        }
        if (accesoPerfilSanciones.getPerfilId() == 6) { // Si es un usuario con Perfil OCI
            if (cs_sinreglab.getPerfilId() == accesoPerfilSanciones.getPerfilId()) { //  solo puede realizar acciones sobre los registros que ha creado
                return Boolean.TRUE;
            } else {
                return Boolean.FALSE;
            }
        }
        if (accesoPerfilSanciones.getPerfilId() == 3) {
            if (cs_sinreglab.getEntidad_id().equals(loggedUser.getEntidad().getId()) && (cs_sinreglab.getPerfilId() == accesoPerfilSanciones.getPerfilId() || cs_sinreglab.getPerfilId() <= 2)) {
                return Boolean.TRUE;
            } else {
                return false;
            }
        }
//        if (cs_sinreglab.getEntidad_id().equals(loggedUser.getEntidad().getId())) {
//            return Boolean.TRUE;
//        } else {
        return false;
//        }
    }
//    }
//    @Log
//    public Boolean getOpcionEliminacionSancion() {
//
//        if (!"VIGENTE".equals(cs_sinreglab.getEstado())) {
//            return Boolean.FALSE;
//        }
//
//        long nroFechas = fechaActual.getTime() - cs_sinreglab.getFecha_creacion().getTime();
//        int nroDiasCreacionSancion = (int) Math.floor(nroFechas / (1000 * 60 * 60 * 24));
//        System.out.println("NRO DIAS - " + nroFechas + " DIAX - " + nroDiasCreacionSancion);
//        if (nroDiasCreacionSancion > nroDiasEliminarSancion) {
//            return Boolean.FALSE;
//        }
//
//        return Boolean.TRUE;
//    }
//    @Log
//    public Boolean getOpcionAnularSancion() {
//
//        System.out.println("ESTADOX - " + cs_sinreglab.getEstado());
//
//        if (!("VIGENTE".equals(cs_sinreglab.getEstado()) || "SUSPENDIDA".equals(cs_sinreglab.getEstado()))) {
//            System.out.println("ANULAR");
//            return Boolean.FALSE;
//        }
//
//        long nroFechas = fechaActual.getTime() - cs_sinreglab.getFecha_creacion().getTime();
//        int nroDiasCreacionSancion = (int) Math.floor(nroFechas / (1000 * 60 * 60 * 24));
//        System.out.println("NRO DIAS - " + nroDiasCreacionSancion + " DIAX - " + nroDiasEliminarSancion);
//        if (nroDiasCreacionSancion > nroDiasEliminarSancion) {
//            return Boolean.FALSE;
//        }
//
//        return Boolean.TRUE;
//    }
    @InjectComponent
    @Property
    private Zone exportarPersonasSancionZone;
    @Property
    @Persist
    private UploadedFile fileDocumentosPersona;
    @Component(id = "formularioExpotacionSanciones")
    private Form formularioExpotacionSanciones;
    @Property
    @Persist
    private Boolean errorCargaExcel;

    @Log
    Object onSuccessFromFormularioExpotacionSanciones() throws IOException {
        Encriptacion encripta = new Encriptacion();
        GeneracionXLS geXLS = new GeneracionXLS();
//        archivoExcelStream = null;
        errorCargaExcel = Boolean.FALSE;
        formularioExpotacionSanciones.clearErrors();

        try {
            if (fileDocumentosPersona.getFileName().indexOf(".xlsx") < 1) {
                formularioExpotacionSanciones.recordError("Solo puede subir archivos con la siguiente extensión: .xlsx");
                errorCargaExcel = Boolean.TRUE;
                return this;
            } else {
                XSSFWorkbook archivoExcel = new XSSFWorkbook(fileDocumentosPersona.getStream());
                XSSFSheet hojaArchivoExcel = archivoExcel.getSheet(archivoExcel.getSheetName(0));
                List<String> docPersonas = new ArrayList<String>();
                //EL DOCUMENTO TIENE UNA CABECERA ()
                XSSFRow row0 = hojaArchivoExcel.getRow(0);
                XSSFCell cellA0 = row0.getCell((short) 0);
                //OBTENER LOS DOCUMENTOS DEL EXCEL Y LLENARLOS A UNA LISTA  
                if (cellA0 != null) {
                    for (int i = 1; i < hojaArchivoExcel.getPhysicalNumberOfRows(); i++) {
                        String tmpDocumento = "";
                        Long numDocumento;
                        XSSFRow registro = hojaArchivoExcel.getRow(i);
                        if (registro == null) {
                            formularioExpotacionSanciones.recordError("Nro de DNI incorrecto = Fila : " + (i + 1) + " - Vacio");
                            errorCargaExcel = Boolean.TRUE;
                        } else {
                            Cell documentoPersona = registro.getCell(0);
                            try {
                                switch (documentoPersona.getCellType()) {
                                    case Cell.CELL_TYPE_STRING:
                                        numDocumento = Long.parseLong(documentoPersona.getStringCellValue());
                                        tmpDocumento = documentoPersona.getStringCellValue();
                                        break;
                                    case Cell.CELL_TYPE_FORMULA:
                                        tmpDocumento = "";
                                        break;
                                    case Cell.CELL_TYPE_NUMERIC:
                                        tmpDocumento = Double.toString(documentoPersona.getNumericCellValue());
                                        break;
                                    case Cell.CELL_TYPE_BLANK:
                                        tmpDocumento = "";
                                        break;
                                    case Cell.CELL_TYPE_BOOLEAN:
                                        tmpDocumento = "";
                                        break;
                                }
                                if (tmpDocumento.length() != 8 && tmpDocumento.length() != 11) {
                                    formularioExpotacionSanciones.recordError("Nro de DNI incorrecto : Fila = " + (i + 1) + " - Valor = " + tmpDocumento);
                                    errorCargaExcel = Boolean.TRUE;
                                }
                                docPersonas.add(tmpDocumento);
                            } catch (IllegalStateException e) {
                                System.out.println(e.toString());
                                formularioExpotacionSanciones.recordError("Nro de DNI incorrecto = Fila : " + (i + 1) + " - Valor : " + documentoPersona.getStringCellValue());
                                errorCargaExcel = Boolean.TRUE;
                            }
                        }
                    }
                }
                if (errorCargaExcel == Boolean.TRUE) {
                    return this;
                }

                // INICIO DE LA EXPORTACION DEL EXCEL 
                System.out.println("NRO DE DOCUMENTOS - " + docPersonas.size());
                //Consulta
                Criteria c = session.createCriteria(LkBusquedaSancion.class);
                c.add(Restrictions.in("nro_doc_persona", docPersonas));
                List<Long> sinAccesoEstado = new ArrayList<Long>();
                if (accesoPerfilSanciones.getAccesovigente() == Boolean.FALSE) {
                    sinAccesoEstado.add(1L);
                }
                if (accesoPerfilSanciones.getAccesonovigente() == Boolean.FALSE) {
                    sinAccesoEstado.add(2L);
                }
                if (accesoPerfilSanciones.getAccesoanulada() == Boolean.FALSE || accesoPerfilSanciones.getPerfilId() > 2) {
                    sinAccesoEstado.add(3L);
                }
                if (accesoPerfilSanciones.getAccesosuspendida() == Boolean.FALSE) {
                    sinAccesoEstado.add(4L);
                }
                if (accesoPerfilSanciones.getAccesohistorico() == Boolean.FALSE) {
                    sinAccesoEstado.add(5L);
                }
                if (accesoPerfilSanciones.getAccesoeliminada() == Boolean.FALSE) {
                    sinAccesoEstado.add(6L);
                }

                Criterion rest1 = null, rest2 = null;
                if (!sinAccesoEstado.isEmpty()) {
                    rest1 = Restrictions.not(Restrictions.in("estado_id", sinAccesoEstado));
                }
                if (accesoPerfilSanciones.getPerfilId() > 2) {
                    if (accesoPerfilSanciones.getAccesoanulada()) {
                        rest2 = Restrictions.and(Restrictions.eq("entidad_id", usuarioTrabajador.getEntidadid()), Restrictions.eq("estado_id", 3L));
                    }
                }
                if (rest2 != null && rest1 != null) {
                    c.add(Restrictions.or(rest1, rest2));
                } else {
                    if (rest1 != null) {
                        c.add(rest1);
                    }
                    if (rest2 != null) {
                        c.add(rest2);
                    }
                }
                List<LkBusquedaSancion> sancionados = c.list();
//                elemento = 2;
//                List<LkBusquedaSancion> sancionados = getBusquedaSancionadosSinRegLab();
                archivoDescargar = STARTPATH + encripta.MD5(String.valueOf(new Date())) + ".xls";
                errores = geXLS.generadoXLSConsultaSancionadosSinRegLab(sancionados, archivoDescargar, session);
                OpcionMostrarEnlace = true;
            }
        } catch (Exception e) {
            formularioExpotacionSanciones.recordError("Formato erróneo, Subir archivo con el Formato Establecido");;
        }
        return this;
    }

    @Log
    StreamResponse onActionFromDescargarExcelSanciones() {
        errorCargaExcel = Boolean.TRUE;
        return new StreamResponse() {
            InputStream inputStream;

            @Override
            public void prepareResponse(Response response) {
                File fileADescargar = new File(archivoDescargar);
                try {
                    //inputStream = archivoExcelStream;
                    inputStream = new FileInputStream(fileADescargar);
                    response.setHeader("Content-Type", "application/vnd.ms-excel");
                    response.setHeader("Content-Disposition", "inline; filename=" + archivoDescargar);
                    response.setHeader("Content-Length", "" + inputStream.available());
                } catch (Exception e) {
                    System.out.println(e.toString());
                }
            }

            @Override
            public String getContentType() {
                return "application/vnd.ms-excel";
            }

            @Override
            public InputStream getStream() throws IOException {
                return inputStream;
            }
        };
    }

    Object onBuscarenti() {
        return new MultiZoneUpdate("consultaSancionesZone", consultaSancionesZone.getBody()).add("busZone", busZone.getBody());
    }
}
